package com.back.service;

import com.back.model.dto.skill.SkillAddRequest;
import com.back.model.dto.skill.SkillQueryRequest;
import com.back.model.dto.skill.SkillUpdateRequest;
import com.back.model.entity.Skill;
import com.back.model.vo.skill.SkillVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
* @author 李瑞
* @description 针对表【Skill】的数据库操作Service
* @createDate 2025-01-21 15:30:00
*/
public interface SkillService extends IService<Skill> {

    /**
     * 添加技能
     * @param skillAddRequest 技能添加请求
     * @return 技能ID
     */
    long addSkill(SkillAddRequest skillAddRequest);

    /**
     * 删除技能
     * @param id 技能ID
     * @return 是否删除成功
     */
    boolean deleteSkill(long id);

    /**
     * 更新技能
     * @param skillUpdateRequest 技能更新请求
     * @return 是否更新成功
     */
    boolean updateSkill(SkillUpdateRequest skillUpdateRequest);

    /**
     * 根据ID获取技能
     * @param id 技能ID
     * @return 技能VO
     */
    SkillVO getSkillVOById(long id);

    /**
     * 分页查询技能列表
     * @param skillQueryRequest 查询请求
     * @return 技能VO分页列表
     */
    IPage<SkillVO> listSkillVOByPage(SkillQueryRequest skillQueryRequest);

    /**
     * 根据英雄ID获取技能列表
     * @param heroId 英雄ID
     * @return 技能VO列表
     */
    List<SkillVO> getSkillListByHeroId(Integer heroId);

    /**
     * 校验技能信息
     * @param skill 技能实体
     * @param add 是否为添加操作
     */
    void validSkill(Skill skill, boolean add);

    /**
     * 获取技能VO
     * @param skill 技能实体
     * @return 技能VO
     */
    SkillVO getSkillVO(Skill skill);
}